home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / ste / stedemo.lzh / 10KHZSTE.S < prev    next >
Text File  |  1990-07-06  |  15KB  |  901 lines

  1. *************************************************
  2. * Mod-palyeri sovitettuna STE:n äänipiirille
  3. * JV 30/4/90
  4. *
  5. * Parannettu tulostusta ja kommentoitu
  6. ************************************************
  7.  
  8.  
  9.     include    'a:\sorsat\startup.s'
  10.     
  11.     
  12. main
  13.     jsr    alusta            alustetaan ste:n äänipiiri
  14.     
  15.     JSR    SAVE_INTERRUPTS
  16.     JSR    INPUT_MODULE_NAME
  17.     JSR    INIT_MUSIC
  18.     JSR    INIT_INTERRUPTS
  19.     JSR    PLAY_MUSIC
  20. TOO_BAD
  21.     JSR    REINSTALL_INTERRUPTS
  22.     rts
  23.     
  24.  
  25. ************************************************
  26. * STE äänipiirin alustus
  27.  
  28.  
  29. alusta
  30.  
  31.     move.b    #0,$ff8901    resetoidaan äänipiiri
  32.     move.b    #$03,$ff8921    stereomode,50 kHz
  33.     lea    adata,a0    puskurin alkuosoite
  34.     move.l    a0,d0
  35.     move.b    d0,$ff8907
  36.     lsr.l    #8,d0
  37.     move.b    d0,$ff8905
  38.     lsr.l    #8,d0
  39.     move.b    d0,$ff8903
  40.  
  41.     lea    adata+2,a0    puskurin loppuosoite
  42.     move.l    a0,d0
  43.     move.b    d0,$ff8913
  44.     lsr.l    #8,d0
  45.     move.b    d0,$ff8911
  46.     lsr.l    #8,d0
  47.     move.b    d0,$ff890f
  48.     move.b    #3,$ff8901    aloitetaan toisto
  49.     
  50.     move.w    #$7ff,$ff8924    suodattimen data
  51.     move.w    #%0000001001001100,$ff8924
  52.  
  53.     rts
  54.     
  55.  
  56.  
  57.     even
  58.  
  59. adata    ds.b    1        äänipuskuri on 2 datan mittainen
  60. bdata    ds.b    1
  61.  
  62. ***********************************************
  63.  
  64. SAVE_INTERRUPTS
  65.  
  66.     MOVE.L    $70.W,SAVE_VBL
  67.     MOVE.B    $FFFFFA07.W,MFP
  68.     MOVE.B    $FFFFFA09.W,MFP+1
  69.     MOVEM.L    $FFFF8240.W,D0-D7
  70.     MOVEM.L    D0-D7,SHIFTER
  71.     MOVE.B    $FFFF8260.W,SHIFTER+32
  72.     MOVE.L    $134.W,TIMERA
  73.     MOVE.B    $FFFFFA0B.W,TIMERA+4
  74.     MOVE.B    $FFFFFA0F.W,TIMERA+5
  75.     MOVE.B    $FFFFFA13.W,TIMERA+6
  76.     MOVE.B    $FFFFFA19.W,TIMERA+7
  77.     MOVE.B    $FFFFFA1F.W,TIMERA+8
  78.     RTS
  79.  
  80. *********************************************************
  81.  
  82. INPUT_MODULE_NAME
  83.  
  84.     MOVE.L    #INDICATION,-(SP)     kysytään nimi
  85.     MOVE    #9,-(SP)
  86.     TRAP    #1
  87.  
  88.     LEA    6(SP),SP        teksti puskuriin
  89.     PEA    FILENAME
  90.     MOVE.W    #$A,-(SP)
  91.     TRAP    #1
  92.     LEA    6(SP),SP
  93.     RTS
  94.  
  95. *******************************************************
  96.  
  97. INIT_MUSIC
  98.  
  99.     CLR    -(SP)
  100.     MOVE.L    #FILENAME+2,-(SP)
  101.     MOVE    #$3D,-(SP)
  102.     TRAP    #1
  103.     LEA    8(SP),SP
  104.     MOVE.L    D0,D1
  105.     TST.W    D0
  106.     BMI    ERROR
  107.     MOVE.L    #BUFFER,-(SP)
  108.     MOVE.L    #$FFFFF,-(SP)
  109.     MOVE    D1,-(SP)
  110.     MOVE    #$3F,-(SP)
  111.     TRAP    #1
  112.     LEA    12(SP),SP
  113.     TST.L    D0
  114.     BMI    ERROR
  115.     MOVE    D1,-(SP)
  116.     MOVE    #$3E,-(SP)
  117.     TRAP    #1
  118.     LEA    4(SP),SP
  119.     TST.W    D0
  120.     BMI    ERROR
  121.  
  122.     LEA    BUFFER,A0
  123.     LEA    20+30*15(A0),A0
  124.     MOVEQ    #0,D0
  125.     MOVE.B    (A0)+,D0
  126.     MOVEQ    #0,D1
  127.     MOVE.B    (A0)+,D1
  128.     
  129.     LEA    BUFFER,A0
  130.     LEA    30*16(A0),A0
  131.     ADD    D1,A0
  132.     MOVE.L    A0,PAT
  133.     
  134.     LEA    BUFFER,A0
  135.     LEA    20+30*15+2(A0),A0
  136.     MOVEQ    #0,D1
  137.     MOVEQ    #0,D2
  138. HOW_MANY_PAT
  139.     MOVE.B    (A0)+,D1
  140.     CMP.B    D1,D2
  141.     BPL    CONT_HOW_MANY_PAT
  142.     MOVE.B    D1,D2
  143.     
  144. CONT_HOW_MANY_PAT
  145.     
  146.     DBRA    D0,HOW_MANY_PAT    
  147.     ADD.B    #1,D2
  148.     MULU    #1024,D2
  149.     MOVE.L    PAT,D0
  150.     ADD.L    D2,D0
  151.     MOVE.L    D0,A2
  152.     LEA    BUFFER,A0
  153.     LEA    20(A0),A0
  154.     LEA    INS,A1
  155.     LEA    16(A1),A1
  156.     MOVEQ    #15-1,D0
  157. READ_INS
  158.     MOVEQ    #0,D1
  159.     MOVE    22(A0),D1
  160.     LSL.L    #1,D1
  161.     MOVE.L    D1,(A1)
  162.     MOVE.L    D1,4(A1)
  163.     MOVEQ    #0,D1
  164.     MOVE    24(A0),D1
  165.     BEQ    CONT_READ_VOLUME
  166.     SUBQ    #1,D1
  167.  
  168. CONT_READ_VOLUME
  169.  
  170.     MOVE    D1,12(A1)
  171.     MOVEQ    #0,D1
  172.     MOVE    28(A0),D1
  173.     LSL.L    #1,D1
  174.     CMP.B    #2,D1
  175.     BNE    CONT_READ_INS
  176.     MOVEQ    #0,D1
  177.     
  178. CONT_READ_INS
  179.     
  180.     SWAP    D1
  181.     MOVE.L    D1,8(A1)
  182.     MOVE.L    (A1),D1
  183.     MOVE.L    A2,4(A1)
  184.     ADD.L    D1,A2
  185.     LEA    30(A0),A0
  186.     LEA    16(A1),A1
  187.     DBRA    D0,READ_INS
  188.  
  189.     LEA    INS,A0
  190.     LEA    16(A0),A0
  191.     LEA    BUFFER,A1
  192.     LEA    20(A1),A1
  193.     LEA    $68000,A2
  194.     MOVEQ    #15-1,D0
  195.  
  196. REVERSE
  197.  
  198.     MOVEQ    #0,D1
  199.     MOVE    22(A1),D1
  200.     BEQ    END_REVERSE_THIS_INS
  201.     LSL.L    #1,D1
  202.     SUBQ.L    #1,D1
  203.     MOVE.L    D1,D2
  204.     MOVE.L    4(A0),A3
  205. REV_1
  206.     MOVE.B    (A3)+,(A2)
  207.     ADD.B    #$80,(A2)+
  208.     DBRA    D1,REV_1
  209.     MOVE.L    4(A0),A3
  210. REV_2
  211.     MOVE.B    -(A2),(A3)+
  212.     DBRA    D2,REV_2
  213.     
  214. END_REVERSE_THIS_INS
  215.     
  216.     LEA    16(A0),A0
  217.     LEA    30(A1),A1
  218.     DBRA    D0,REVERSE
  219.     RTS
  220.  
  221.  
  222. ***********************************************************
  223.  
  224. INIT_INTERRUPTS
  225.  
  226. MFP_RESET
  227.  
  228.     MOVE.B    #0,$FFFFFA07.W
  229.     MOVE.B    #0,$FFFFFA09.W
  230.  
  231. YAMAHA_RESET
  232.  
  233.     MOVE.B    #0,$FFFF8800.W
  234.     MOVE.B    #0,$FFFF8802.W
  235.     MOVE.B    #1,$FFFF8800.W
  236.     MOVE.B    #0,$FFFF8802.W
  237.     MOVE.B    #2,$FFFF8800.W
  238.     MOVE.B    #0,$FFFF8802.W
  239.     MOVE.B    #3,$FFFF8800.W
  240.     MOVE.B    #0,$FFFF8802.W
  241.     MOVE.B    #4,$FFFF8800.W
  242.     MOVE.B    #0,$FFFF8802.W
  243.     MOVE.B    #5,$FFFF8800.W
  244.     MOVE.B    #0,$FFFF8802.W
  245.     MOVE.B    #7,$FFFF8800.W
  246.     MOVE.B    #$FF,$FFFF8802.W
  247.     MOVE.B    #8,$FFFF8800.W
  248.     MOVE.B    #0,$FFFF8802.W
  249.     MOVE.B    #9,$FFFF8800.W
  250.     MOVE.B    #0,$FFFF8802.W
  251.     MOVE.B    #10,$FFFF8800.W
  252.     MOVE.B    #0,$FFFF8802.W
  253.     RTS
  254.  
  255. ***************************************************************
  256.  
  257. REINSTALL_INTERRUPTS
  258.  
  259.     MOVEM.L    NO_COLOR,D0-D7
  260.     MOVEM.L    D0-D7,$FFFF8240.W
  261.     MOVE.L    SAVE_VBL,$70.W
  262.     MOVE.L    TIMERA,$134.W
  263.     MOVE.B    TIMERA+4,$FFFFFA0B.W
  264.     MOVE.B    TIMERA+5,$FFFFFA0F.W
  265.     MOVE.B    TIMERA+6,$FFFFFA13.W
  266.     MOVE.B    TIMERA+7,$FFFFFA19.W
  267.     MOVE.B    TIMERA+8,$FFFFFA1F.W
  268.     MOVE.B    MFP,$FFFFFA07.W
  269.     MOVE.B    MFP+1,$FFFFFA09.W
  270.     
  271.     MOVE.L    #CLS,-(SP)
  272.     MOVE    #9,-(SP)
  273.     TRAP    #1
  274.     LEA    6(SP),SP
  275.     
  276.     MOVEM.L    SHIFTER,D0-D7
  277.     MOVEM.L    D0-D7,$FFFF8240.W
  278.     RTS
  279.  
  280. ERROR
  281.     MOVE.L    #TOO_BAD,(SP)
  282.     RTS
  283.  
  284. ***********************************************************
  285.  
  286. PLAY_MUSIC
  287.  
  288. ;GET MUSIC GOING
  289.  
  290. ON    MOVE.W    #$2700,SR        ei saa keskeyttää
  291.     LEA    PLAYER_DATA,A4        datapointteri
  292.     MOVE.W    #6,SPD+2        
  293.     MOVE.B    #6,SPEED(A4)
  294.     MOVE.B    #1,POS(A4)
  295.     MOVE.B    SEQ-2,TRK(A4)
  296.     MOVE.L    #SEQ-1,MUS+2
  297.     LEA    OFF,A0
  298.     LEA    OFF,A1
  299.     LEA    OFF,A2
  300.     LEA    OFF,A3
  301.     CLR.L    D0
  302.     CLR.L    D1
  303.     CLR.L    D2
  304.     CLR.L    D3
  305.     MOVE.L    #$7F8,D7
  306.     
  307.     LEA    $FFFF8800.W,A4        pointteri äänipiiriin
  308.     
  309.     CLR.L    F0+2            smf koodia !!!!!
  310.     CLR.L    F1+2            paskaaa !!!!!!!!
  311.     CLR.L    F2+2            ilmeisesti portamentoa
  312.     CLR.L    F3+2            varten ???
  313.     CLR.L    V0+2
  314.     CLR.L    V1+2
  315.     CLR.L    V2+2
  316.     CLR.L    V3+2
  317.     
  318.     MOVE.L    #AMIGA,$134.W        Timer-A vektori
  319.     
  320.     MOVE.B    #0,$FFFFFA0B.W
  321.     MOVE.B    #0,$FFFFFA0F.W
  322.     MOVE.B    #0,$FFFFFA19.W
  323.     MOVE.B    #0,$FFFFFA1F.W
  324.     MOVE.B    #32,$FFFFFA13.W
  325.     MOVE.B    #0,$FFFFFA19.W
  326.     BCLR    #3,$FFFFFA17.W
  327.     MOVE.B    #61,$FFFFFA1F.W
  328.     MOVE.B    #1,$FFFFFA19.W
  329.     MOVE.B    #32,$FFFFFA07.W
  330.     
  331.     MOVE.L    #VBL,$70.W        Oma VBL rutiini
  332.     STOP    #$2300
  333. MAIN2
  334. *    Put your program which use D6,A5,A6 here
  335.  
  336.     CMP.B    #$39,$FFFFFC02.W
  337.     BEQ    END_PLAYING_MUSIC
  338.     BRA    MAIN2
  339.     
  340. ********************************************************************
  341. * Soittorutiini
  342.  
  343. AMIGA
  344.     SWAP    D0            
  345.     SWAP    D1            
  346.     SWAP    D2            
  347.     SWAP    D3            
  348. V0    SUB.L    #0,D0            portamentot        
  349.     BMI.S    L0            
  350. V1    SUB.L    #0,D1            
  351.     BMI.S    L1            
  352. V2    SUB.L    #0,D2            
  353.     BMI.S    L2            
  354. V3    SUB.L    #0,D3            
  355.     BMI.S    L3            
  356.  
  357. OUT    SWAP    D0            
  358.     SWAP    D1            
  359.     SWAP    D2            
  360.     SWAP    D3            
  361.     MOVEQ    #0,D4            naihin tulos    
  362.     MOVEQ    #0,D5            
  363.     MOVE.B    0(A0,D0),D4        
  364.     MOVE.B    0(A1,D1),D5        
  365.     ADD.W    D5,D4            
  366.     lsr.w    #1,d4
  367.     add.b    #$80,d4
  368.     move.b    d4,adata
  369.     
  370.     clr.w    d5
  371.     clr.w    d4
  372.     MOVE.B    0(A2,D2),D5        
  373.     MOVE.B    0(A3,D3),D4        
  374.     ADD.W    D5,D4        
  375.     
  376.     lsr.w    #1,d4
  377.     add.b    #$80,d4
  378.     move.b    d4,bdata
  379.     rte
  380.  
  381.  
  382. *****************************************************************
  383.     
  384. L0    MOVE.L    #0,D0            jos meni negatiiviseksi
  385. F0    MOVE.L    #0,V0+2            niin nollataan arvo,
  386.     BRA    V1            ei enää vahennetä.
  387.     
  388. L1    MOVE.L    #0,D1
  389. F1    MOVE.L    #0,V1+2
  390.     BRA    V2
  391.     
  392. L2    MOVE.L    #0,D2
  393. F2    MOVE.L    #0,V2+2
  394.     BRA    V3
  395.     
  396. L3    MOVE.L    #0,D3
  397. F3    MOVE.L    #0,V3+2
  398.     BRA    OUT
  399.  
  400. *********************************************************
  401.  
  402. RESTART
  403.     LEA    PLAYER_DATA,A4
  404.     MOVE.W    #6,SPD+2
  405.     MOVE.B    #6,SPEED(A4)
  406.     MOVE.B    #1,POS(A4)
  407.     MOVE.B    SEQ-2,TRK(A4)
  408.     MOVE.L    #SEQ-1,MUS+2
  409.     LEA    OFF,A0
  410.     LEA    OFF,A1
  411.     LEA    OFF,A2
  412.     LEA    OFF,A3
  413.     CLR.L    D0
  414.     CLR.L    D1
  415.     CLR.L    D2
  416.     CLR.L    D3
  417.     CLR.L    F0+2
  418.     CLR.L    F1+2
  419.     CLR.L    F2+2
  420.     CLR.L    F3+2
  421.     CLR.L    V0+2
  422.     CLR.L    V1+2
  423.     CLR.L    V2+2
  424.     CLR.L    V3+2
  425.     BRA    PLAY
  426.  
  427. ***************************************************************
  428. * Pystysynkkarutiini
  429.  
  430. VBL
  431.     MOVE    #$2700,SR        ei saa keskeyttää
  432.     MOVEM.L    D6/A5-A6,-(SP)
  433.     JSR    PORTAMENTO        muodostetaan portamentot
  434.     SUBQ.B    #1,PLAYER_DATA        joko data loppu ?
  435.     BNE    END            ei vielä.
  436.     JSR    PLAY            alustetaan uudestaan
  437. END
  438.     MOVEM.L    (SP)+,D6/A5-A6
  439.     RTE
  440.  
  441.  
  442. PLAYER_DATA    DS.W        8
  443.  
  444. SPEED        EQU        0
  445. POS        EQU        SPEED+1
  446. TRK        EQU        POS+1
  447.  
  448. FRQ        INCBIN     'a:\sorsat\10KHZ.FRQ'
  449.  
  450. ****************************************************************
  451.  
  452. PLAY
  453.     MOVE.L    SAVE_A6_OF_PLAYER,A6
  454.     CMP.B    #$39,$FFFFFC02.W
  455.     BEQ    END_PLAYING_MUSIC
  456.     LEA    PLAYER_DATA(PC),A4
  457.     LEA    INS(PC),A5
  458. SPD    MOVE.B    #6,SPEED(A4)
  459.     SUBQ.B    #1,POS(A4)
  460.     BNE    P0
  461.     MOVE.B    #$40,POS(A4)
  462.     ADDQ.L    #1,MUS+2-PLAYER_DATA(A4)
  463.     SUBQ.B    #1,TRK(A4)
  464.     BMI    RESTART
  465.     
  466. ;BACK TO PLAYER
  467.  
  468.     MOVEQ    #0,D4
  469. MUS    MOVE.B    $0,D4
  470.     SWAP    D4
  471.     LSR.L    #6,D4
  472.     MOVE.L    PAT,A6
  473.     LEA    (A6,D4.L),A6
  474. P0    CLR    VOICE0
  475.     MOVE.W